package com.molichuxing.services.business.service;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.services.business.dto.request.modify.StockCarBizModifyDto;
import com.molichuxing.services.business.dto.request.modify.StockCarRejectionBizModifyDto;
import com.molichuxing.services.business.dto.response.StockCarBaseBizDto;
import com.molichuxing.services.business.dto.response.StockCarBizDto;
import com.molichuxing.services.business.dto.response.StockCarDetailDto;

/**
 * 
 * @author liyg
 * 库存车辆组合服务
 * 2019-08-22
 *
 */
public interface StockCarBizService {

	/**
	 *库存车辆列表
	 * @param map 参数
	 *key:carIds      List      车辆ids 非必填
	 *key:vehicleId  Integer 车型id 非必填
	 *key:status     Integer 库存状态 非必填
	 *key:type       Integer 出入库类型 非必填
	 *key:operationState Integer   运营状态 非必填
	 *key:inStockType  Integer 收车库类型 非必填
	 *key:stockId    Integer 中转库id 非必填
	 *key:startTime  LocalDateTime 开始时间 非必填
	 *key:endTime    LocalDateTime 结束时间 非必填
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 */
	Paged<StockCarBizDto> getStockCarList(Map<String,Object> map);
	
	/**
	 *车辆调拨列表（经销商）
	 * @param map 参数
	 *key:carIds     List 车辆ids 非必填
	 *key:vehicleId  Integer 车型id 非必填
	 *key:storeId    Integer 门店id 非必填
	 *key:stockIds   List 仓库ids
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 */
	Paged<StockCarBizDto> getDealerStockCarList(Map<String,Object> map);
	
	/**
	 *到期还车列表（经销商）
	 * @param map 参数
	 *key:carIds      List 车辆ids 非必填
	 *key:type        Integer 入库类型（1：采购，2：调拨，3、拒收、4、收车） 非必填
	 *key:status      Integer 库存状态（1：待入库，2：已入库） 非必填
	 *key:inStockType Integer 收车库类型（1：中转库，2：门店） 非必填
	 *key:sortName   String 排序字段 
	 *key:sortWay    String 排序方式 
	 *key:pageNum    Integer 当前页
	 *key:pageSize   Integer 每页显示条数
	 * @return
	 */
	Paged<StockCarDetailDto> getReturnStockCarList(Map<String,Object> map);
	
	/**
	 * 获取库存车辆详情
	 * 
	 * @param carId
	 * @return
	 */
	StockCarBizDto getStockCar(Integer carId);
	
	/**
	 * 获取库存车辆详情
	 * 
	 * @param carId
	 * @return
	 */
	StockCarDetailDto getStockCarDetail(Integer carId);
	
	/**
	 * 获取库存车辆详情
	 * 
	 * @param carId
	 * @return
	 */
	StockCarBaseBizDto getStockBaseCar(Integer carId);
	
	/**
	 * 获取库存车辆详情
	 * 
	 * @param carIds
	 * @return
	 */
	Map<Integer,StockCarBizDto> getStockBaseCars(List<Integer> carIds);
	
	/**
	 * 车辆入库
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyInStock(StockCarBizModifyDto modifyDto);
	
	/**
	 * 车辆出库
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyOutStock(StockCarBizModifyDto modifyDto);
	
	/**
	 * 车辆拒收 门店换车
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyRejectionStock(StockCarRejectionBizModifyDto modifyDto);
	
	/**
	 * 门店收车  (车到门店) 或 确认回库
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyCollectStoreStock(StockCarBizModifyDto modifyDto);
	
	/**
	 * 
	 * 车辆到预收库
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyAdvanceStock(StockCarBizModifyDto modifyDto);
	
	/**
	 * 收车 车到中转库
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyCollectStock(StockCarBizModifyDto modifyDto);
	
	/**
	 *车辆调拨
	 * 
	 * @param modifyDto
	 * @return
	 */
	Boolean modifyAllotStock(StockCarBizModifyDto modifyDto);
	
	/**
	 *库存车辆列表(导出)
	 * @param map 参数
	 *key:ids        List 仓库ids
	 *key:carId      Integer      车辆id 非必填
	 *key:vehicleId  Integer 车型id 非必填
	 *key:status     Integer 库存状态 非必填
	 *key:type       Integer 出入库类型 非必填
	 *key:operationState Integer   运营状态 非必填
	 *key:inStockType  Integer 收车库类型 非必填
	 *key:outStockId    Integer 中转库id 非必填
	 *key:inStockId    Integer 中转库id 非必填
	 *key:startTime  LocalDateTime 开始时间 非必填
	 *key:endTime    LocalDateTime 结束时间 非必填
	 * @return
	 */
	List<StockCarBizDto> getStockCarDownloadList(Map<String,Object> map);
	
	/**
	 * 查询 待出租 并且 为已入库 的车辆
	 * @return
	 */
	List<StockCarBizDto> getStockListByStatus();
}
